#ifndef __Code0_CONF_H
#define __Code0_CONF_H
#define VECT_TAB_RAM									 
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*********************************************************************************************************
																			Function	Enable
**********************************************************************************************************/	
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// RS485
#define MOTOR_UPPER_BODY												
#define MOTOR_RIGHT_LEG
#define MOTOR_LEFT_LEG

// RS232
#define DEBUG
#define COMP

// GPIO
#define LED
#define DIP
#define BTN

// Timer IT										
#define IT_UPDATE_MOTOR_SCHEDULE	
#define IT_READ_MOTOR													
//#define	IT_WRITE_MOTOR

//#define IT_READ_IMU
#define IT_GPIO					// Led, Dip and Button, use EXIT not TIMER IT			


//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*********************************************************************************************************
																		Corresponding Component
**********************************************************************************************************/	
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// USART
#ifdef MOTOR_UPPER_BODY
	#define MOTOR_UB_PORT									USART1
	#define 															USER_USART1
#endif																						 

#ifdef MOTOR_LEFT_LEG
	#define MOTOR_LL_PORT									USART2
	#define 															USER_USART2
#endif								

#ifdef MOTOR_RIGHT_LEG
	#define MOTOR_RL_PORT									USART3
	#define 															USER_USART3
#endif 															

#ifdef DEBUG
	#define DEBUG_PORT										UART4					
	#define 															USER_UART4		
#endif

#ifdef COMP
	#define COMP_PORT									   	UART5					
	#define 															USER_UART5		
#endif


// Timer & IT
#ifdef IT_UPDATE_MOTOR_SCHEDULE
	#define SCHEDULE_UPDATE_TIMER					TIM1
	#define																USER_TIM1
#endif																						 

#ifdef IT_READ_MOTOR
	#define READ_MOTOR_TIMER							TIM2	 
	#define																USER_TIM2
#endif

#ifdef IT_READ_IMU
	#define READ_IMU_TIMER								TIM3	 
	#define																USER_TIM3
#endif								
								 
#ifdef IT_WRITE_MOTOR
	#define MOTOR_WRITE_TIMER 						TIM4		
	#define																USER_TIM4
#endif		
//////////////////////////////////////////////////////////////////////////////////////////////////////////	
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*********************************************************************************************************
																				USART Setting
**********************************************************************************************************/	
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// USART1 configuration	
#ifdef USER_USART1													
	#define USER_USART1_BAUDRATE					1000000
//	#define USER_USART1_IT_RX												
//	#define USER_USART1_IT_TC
#endif // USART1

// USART2 configuration	
#ifdef USER_USART2												
	#define USER_USART2_BAUDRATE					1000000
//	#define USER_USART2_IT_RX												
//	#define USER_USART2_IT_TC
#endif // USART2

// USART3 configuration	
#ifdef USER_USART3												
	#define USER_USART3_BAUDRATE					1000000
//	#define USER_USART3_IT_RX													
//	#define USER_USART3_IT_TC
#endif // USART3					 

// UART4 configuration	
#ifdef USER_UART4												
	#define USER_UART4_BAUDRATE						115200
	#define USER_UART4_IT_RX	 												
	//#define USER_UART4_IT_TC
#endif // USART4			 

// UART5 configuration	
#ifdef USER_UART5												
	#define USER_UART5_BAUDRATE						115200
	#define USER_UART5_IT_RX												
	//#define USER_UART5_IT_TC
#endif // USART5
//////////////////////////////////////////////////////////////////////////////////////////////////////////	
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*********************************************************************************************************
															  LED DIP BOTTON Setting
**********************************************************************************************************/	
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifdef LED
	#define LED_PORT											GPIOG
	#define LED1													GPIO_Pin_1		 
	#define LED2													GPIO_Pin_2
	#define LED3													GPIO_Pin_3
	#define LED4													GPIO_Pin_4
	#define LED5													GPIO_Pin_5
	#define LED6													GPIO_Pin_6
	#define LED7													GPIO_Pin_7
	#define LED_NUM												7
#endif									

#ifdef LED
	#define LED_PORT_2										GPIOD
	#define LEDA													GPIO_Pin_10		 
	#define LEDB													GPIO_Pin_11
	#define LEDC													GPIO_Pin_12
#endif

#ifdef DIP								
	#define DIP_PORT											GPIOF										 
	#define DIP1													GPIO_Pin_1		 
	#define DIP2													GPIO_Pin_2
	#define DIP3													GPIO_Pin_3
	#define DIP4													GPIO_Pin_4
	#define DIP5													GPIO_Pin_5
	#define DIP6													GPIO_Pin_6	
	#define DIP_NUM												6				 
#endif
							
#ifdef BTN	
	#define BTN_PORT											GPIOF																 
	#define BTN1													GPIO_Pin_7		 
	#define BTN2													GPIO_Pin_8
	#define BTN3													GPIO_Pin_9
	#define BTN4													GPIO_Pin_10
	#define BTN5													GPIO_Pin_11
	#define BTN6													GPIO_Pin_12	 
	#define BTN_NUM												6			
#endif

																																																														 
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/*********************************************************************************************************
																				TIMER Setting
**********************************************************************************************************/	 
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////
//#ifdef USER_TIM1
//#endif
//
//#ifdef USER_TIM2
//#endif													 
//////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////// 	 
void GPIO_Configuration(void);	
void NVIC_Configuration(void);
void TIM_Configuration(void);		 
void EXTI_Configuration(void);
void USART_Configuration(void);		 
void DMA1_Configuration(USART_TypeDef* USARTx, uint8_t *TxBuffer1, uint16_t num);			
void DMA2_Configuration(uint8_t *TxBuffer1, uint16_t num);
void DIR485_Receive(USART_TypeDef* USARTx);						 
void DIR485_Send(USART_TypeDef* USARTx);
void RS232_Send(USART_TypeDef* USARTx, uint8_t *TxBuffer1, uint16_t num);

void MotorWrite_DMA_Configuration(USART_TypeDef* USARTx, uint8_t *TxBuffer1, uint16_t num);
void Delay (unsigned long nCount);						



#endif // __Code0_CONF_H 
